package persistencia.cliente;

import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import negocio.busqueda.Perfil;
import negocio.cv.ConocimientoIdioma;
import negocio.cv.HerramientaInformatica;
import negocio.cv.Idioma;
import negocio.cv.TipoHerramientaInformatica;
import persistencia.DACBase;

public class DACHerramientaInformatica extends DACBase{

	private TipoHerramientaInformatica tipoDeHerrInf;
	private HerramientaInformatica herrInf;	
	private List<HerramientaInformatica> herrsInfs;
	private CallableStatement clstm;
	private ResultSet rs, rsAux;
	private List<TipoHerramientaInformatica> tiposDeHerrInf;
	

	 
	 public DACHerramientaInformatica(DACBase dacBase) {
		super(dacBase);
		// TODO Auto-generated constructor stub
	}

	public List<TipoHerramientaInformatica> consultarTipoHerramientaInformatica(){
		tiposDeHerrInf = new ArrayList<TipoHerramientaInformatica>();
		try{
			
			clstm = getConn().prepareCall("{call tipoHerramientaInformaticaConsultarTodos()}"); 
			clstm.execute();
			rs = clstm.getResultSet();			
			while (rs.next()) {

				tipoDeHerrInf = new TipoHerramientaInformatica();
				tipoDeHerrInf.setIdTipoHerramientaInformatica(rs.getInt("idtipoherramientainformatica"));

				tipoDeHerrInf.setNombre(rs.getString("nombre"));
				tipoDeHerrInf.setDescripcion(rs.getString("descripcion"));
				
				
				
				
				// ahora materializamos las herramientas
				herrsInfs = new ArrayList<HerramientaInformatica>(); 
				clstm = getConn().prepareCall("{call herrinfConsultarPorTipo(?)}");
				clstm.setInt("tipo", tipoDeHerrInf.getIdTipoHerramientaInformatica()); 
				clstm.execute();
				rsAux = clstm.getResultSet();					
				
				while (rsAux.next()) {
					
					herrInf = new HerramientaInformatica();
					herrInf.setIdHerramientaInformatica(rsAux.getInt("idherramientainformatica"));
					herrInf.setNombre(rsAux.getString("nombre"));
					herrInf.setDescricpion(rsAux.getString("descripcion"));					
					
					herrsInfs.add(herrInf);					
					
				}
				
				// se las asigno al tipo de herramienta
				tipoDeHerrInf.setHerramientasInformaticas(herrsInfs);
				
				
				//finalemente lo agragamos a la lista								 
				tiposDeHerrInf.add(tipoDeHerrInf);
            }			           
			
			
			
			rs.close();
			rs = null;
			rsAux.close();
			rsAux = null;
			clstm.close();
            clstm = null;
            
          
            
		}    
		catch (SQLException ex) {
		    // handle any errors
		    System.out.println("SQLException: " + ex.getMessage());
		    System.out.println("SQLState: " + ex.getSQLState());
		    System.out.println("VendorError: " + ex.getErrorCode());
		    System.out.println("Error en metodo herramientainformaticaConsultar_Dacherramientainformatica");
			}
		
	    return tiposDeHerrInf;		
	}
	
		/* otra opcion
		
		public TipoHerramientaInformatica consultarTipoHerramientaInformatica(String tipo){
			
			try{
				clstm = getConn().prepareCall("{call tipoHerramientaInformaticaConsultarTodos(?)}");
				clstm.setString("tiponombre", tipo);
				clstm.execute();
				rs = clstm.getResultSet();			
				if (rs.next()) {
					
					tipoDeHerrInf = new TipoHerramientaInformatica();
					tipoDeHerrInf.setIdTipoHerramientaInformatica(rs.getInt("idtipoherramientainformatica"));
					tipoDeHerrInf.setNombre(rs.getString("nombre"));
					tipoDeHerrInf.setDescripcion(rs.getString("descripcion"));
					
						
					// ahora materializamos las herramientas
					herrsInfs = new LinkedList<HerramientaInformatica>(); 
					clstm = getConn().prepareCall("{call herramientainformaticaConsultar(?)}");
					clstm.setInt("tipo", tipoDeHerrInf.getIdTipoHerramientaInformatica()); 
					clstm.execute();
					rsAux = clstm.getResultSet();			
					while (rsAux.next()) {
						
						herrInf = new HerramientaInformatica();
						herrInf.setIdHerramientaInformatica(rs.getInt("idherramientainformatica"));
						herrInf.setNombre(rs.getString("nombre"));
						herrInf.setDescricpion(rs.getString("descricpion"));					
						
						herrsInfs.add(herrInf);				
					}
					
					// se las asigno al tipo de herramienta
					tipoDeHerrInf.setHerramientasInformaticas(herrsInfs);			
					
	            }			           			
				
				rs.close();
				rs = null;
				rsAux.close();
				rsAux = null;
				clstm.close();
	            clstm = null;
	            
	            getConn().close();
	            
			}    
			catch (SQLException ex) {
			    // handle any errors
			    System.out.println("SQLException: " + ex.getMessage());
			    System.out.println("SQLState: " + ex.getSQLState());
			    System.out.println("VendorError: " + ex.getErrorCode());
			    System.out.println("Error en metodo herramientainformaticaConsultar_Dacherramientainformatica");
				}
			
		    return tipoDeHerrInf;		
		}
		*/
	 public HerramientaInformatica consultarHerramientaInformatica(int id) {
			try{
				clstm = getConn().prepareCall("{call herrinfConsultar(?)}"); 
				clstm.setInt("id", id);
				clstm.execute();
				rs = clstm.getResultSet();			
				if (rs.next()) {
					
					herrInf = new HerramientaInformatica();
					herrInf.setIdHerramientaInformatica(rs.getInt("idherramientainformatica"));
					herrInf.setNombre(rs.getString("nombre"));
					herrInf.setDescricpion(rs.getString("descripcion"));		
	            }			           

				rs.close();
				rs = null;
				clstm.close();
	            clstm = null;
	            
	           
	            
			}    
			catch (SQLException ex) {
			    // handle any errors
			    System.out.println("SQLException: " + ex.getMessage());
			    System.out.println("SQLState: " + ex.getSQLState());
			    System.out.println("VendorError: " + ex.getErrorCode());
			    System.out.println("Error en metodo consultarHerramientaInformatica(?)_DacHerramientaInformatica");
				}
			
		    return herrInf;		
		}
	 
}
